home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xmcd-1.4 / common.d / appenv.h next >
Encoding:
C/C++ Source or Header  |  1995-05-10  |  17.3 KB  |  532 lines

  1. /*
  2.  *   appenv - Common header file for xmcd, cda and libdi.
  3.  *
  4.  *    xmcd  - Motif(tm) CD Audio Player
  5.  *    cda   - Command-line CD Audio Player
  6.  *    libdi - CD Audio Player Device Interface Library
  7.  *
  8.  *
  9.  *   Copyright (C) 1995  Ti Kan
  10.  *   E-mail: ti@amb.org
  11.  *
  12.  *   This program is free software; you can redistribute it and/or modify
  13.  *   it under the terms of the GNU General Public License as published by
  14.  *   the Free Software Foundation; either version 2 of the License, or
  15.  *   (at your option) any later version.
  16.  *
  17.  *   This program is distributed in the hope that it will be useful,
  18.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.  *   GNU General Public License for more details.
  21.  *
  22.  *   You should have received a copy of the GNU General Public License
  23.  *   along with this program; if not, write to the Free Software
  24.  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  25.  *
  26.  */
  27. #ifndef __APPENV_H__
  28. #define __APPENV_H__
  29.  
  30. #ifndef LINT
  31. static char *_appenv_h_ident_ = "@(#)appenv.h    5.11 95/01/29";
  32. #endif
  33.  
  34.  
  35. /* Whether STATIC should really be... */
  36. #ifdef DEBUG
  37. #define STATIC
  38. #else
  39. #define STATIC        static
  40. #endif
  41.  
  42.  
  43. #ifdef _XMINC_
  44.  
  45. /* Include needed X11 and Motif headers */
  46. #include <X11/keysym.h>
  47. #include <Xm/Xm.h>
  48. #include <Xm/Form.h>
  49. #include <Xm/Frame.h>
  50. #include <Xm/Label.h>
  51. #include <Xm/List.h>
  52. #include <Xm/MessageB.h>
  53. #include <Xm/PushB.h>
  54. #include <Xm/Scale.h>
  55. #include <Xm/Separator.h>
  56. #include <Xm/Text.h>
  57. #include <Xm/ToggleB.h>
  58. #include <Xm/Protocols.h>
  59. #include <X11/cursorfont.h>
  60. #include <X11/Xatom.h>
  61.  
  62. #endif
  63.  
  64.  
  65. /* Common header files to be included for all modules */
  66. #include <sys/types.h>
  67. #include <sys/stat.h>
  68. #include <sys/wait.h>
  69. #include <sys/ioctl.h>
  70. #ifndef NO_STDLIB_H
  71. #include <stdlib.h>
  72. #endif
  73. #include <stdio.h>
  74. #include <ctype.h>
  75. #include <errno.h>
  76. #include <fcntl.h>
  77. #include <signal.h>
  78. #include <memory.h>
  79. #include <dirent.h>
  80. #include <pwd.h>
  81. #ifdef BSDCOMPAT
  82. #include <strings.h>
  83. #else
  84. #include <string.h>
  85. #endif
  86.  
  87.  
  88. /* Define these just in case the OS does not support the POSIX definitions */
  89. #ifndef S_ISBLK
  90. #define S_ISBLK(m)    (((m) & S_IFMT) == S_IFBLK)
  91. #endif
  92. #ifndef S_ISCHR
  93. #define S_ISCHR(m)    (((m) & S_IFMT) == S_IFCHR)
  94. #endif
  95. #ifndef S_ISDIR
  96. #define S_ISDIR(m)    (((m) & S_IFMT) == S_IFDIR)
  97. #endif
  98.  
  99.  
  100. /* Data type definitions: for portability */
  101. #ifdef __alpha
  102. #define SIXTY_FOUR_BIT
  103. #endif
  104.  
  105. typedef unsigned char    byte_t;            /* 8-bit unsigned */
  106. typedef char        sbyte_t;        /* 8-bit signed */
  107. typedef unsigned short    word16_t;        /* 16-bit unsigned */
  108. typedef short        sword16_t;        /* 16-bit signed */
  109. #ifdef SIXTY_FOUR_BIT
  110. typedef unsigned int    word32_t;        /* 32-bit unsigned */
  111. typedef int        sword32_t;        /* 32-bit signed */
  112. #else
  113. typedef unsigned long    word32_t;        /* 32-bit unsigned */
  114. typedef long        sword32_t;        /* 32-bit signed */
  115. #endif
  116. typedef char        bool_t;            /* Boolean */
  117.  
  118.  
  119. /* Endianess */
  120. #define _L_ENDIAN_    1234
  121. #define _B_ENDIAN_    4321
  122.  
  123. #if defined(i286) || defined(i386) || defined(i486) || \
  124.     defined(__FreeBSD__) || defined(__alpha) || defined(vax) || \
  125.     (defined(mips) && defined(MIPSEL))
  126. #define _BYTE_ORDER_    _L_ENDIAN_
  127. #else
  128. #define _BYTE_ORDER_    _B_ENDIAN_
  129. #endif
  130.  
  131.  
  132. /* Platform-specific stuff */
  133. #ifdef macII
  134.  
  135. #ifndef WEXITSTATUS
  136. #define WEXITSTATUS(x)    (((x.w_status) >> 8) & 0377)
  137. #endif
  138. #ifndef WTERMSIG
  139. #define WTERMSIG(x)    ((x.w_status) & 0177)
  140. #endif
  141.  
  142. typedef union wait    waitret_t;
  143.  
  144. #else    /* macII */
  145.  
  146. typedef int        waitret_t;
  147.  
  148. #endif    /* macII */
  149.  
  150.  
  151. #if defined(macII)
  152. #define MKFIFO(path, mode)    mknod((path), S_IFIFO | (mode), 0)
  153. #else
  154. #define MKFIFO(path, mode)    mkfifo((path), (mode))
  155. #endif
  156.  
  157.  
  158. #ifdef BSDCOMPAT
  159. #ifndef strchr
  160. #define strchr        index
  161. #endif
  162. #ifndef strrchr
  163. #define strrchr        rindex
  164. #endif
  165. #ifndef SIGCLD
  166. #define SIGCLD        SIGCHLD
  167. #endif
  168. #endif    /* BSDCOMPAT */
  169.  
  170.  
  171. /* Boolean flags */
  172. #ifndef FALSE
  173. #define FALSE        0
  174. #endif
  175. #ifndef TRUE
  176. #define TRUE        1
  177. #endif
  178.  
  179.  
  180. /* Constant definitions */
  181. #define TEMP_DIR    "/tmp/.cdaudio"        /* Temporary directory */
  182. #define STR_BUF_SZ    64            /* Generic string buf size */
  183. #define ERR_BUF_SZ    256            /* Generic errmsg buf size */
  184. #define FILE_PATH_SZ    72            /* Max file path length */
  185. #define MAXTRACK    100            /* Max number of tracks */
  186. #define LEAD_OUT_TRACK    0xaa            /* Lead-out track number */
  187. #define FRAME_PER_SEC    75            /* Frames per second */
  188. #define MAX_VOL        100            /* Max logical audio volume */
  189.  
  190.  
  191. /* Macros */
  192. #define MSF_OFFSET(s)    ((s)->trkinfo[0].frame + \
  193.     (((s)->trkinfo[0].min * 60 + (s)->trkinfo[0].sec) * FRAME_PER_SEC))
  194.                         /* Starting MSF offset */
  195.  
  196.  
  197. /* Defines for the type field in trkinfo_t */
  198. #define TYP_AUDIO    1            /* Audio track */
  199. #define TYP_DATA    2            /* Data track */
  200.  
  201.  
  202. /* Defines for the mode field in curstat_t */
  203. #define M_NODISC    0            /* No disc loaded */
  204. #define M_PLAY        1            /* Play mode */
  205. #define M_PAUSE        2            /* Pause mode */
  206. #define M_STOP        3            /* Stop mode */
  207. #define M_A        4            /* First half of A->B mode */
  208. #define M_AB        5            /* Running A->B mode */
  209. #define M_SAMPLE    6            /* Sample mode */
  210.  
  211.  
  212. /* Defines for the time_dpy field in curstat_t */
  213. #define T_ELAPSED    0            /* Per-track elapsed time */
  214. #define T_REMAIN_TRACK    1            /* Per-track remaining time */
  215. #define T_REMAIN_DISC    2            /* Whole-disc remaining time */
  216.  
  217.  
  218. /* CD per-track information */
  219. typedef struct {
  220.     sword32_t    trkno;            /* Track number */
  221.     word32_t    addr;            /* Absolute offset block */
  222.     byte_t        min;            /* Absolute offset minutes */
  223.     byte_t        sec;            /* Absolute offset seconds */
  224.     byte_t        frame;            /* Absolute offset frame */
  225.     byte_t        type;            /* track type */
  226. } trkinfo_t;
  227.  
  228.  
  229. /* Structure containing current status information */
  230. typedef struct {
  231.     byte_t        mode;            /* Player mode */
  232.     byte_t        time_dpy;        /* Time display mode */
  233.     byte_t        reserved[2];        /* reserved */
  234.     sword32_t    first_trk;        /* First track */
  235.     sword32_t    last_trk;        /* Last track */
  236.     byte_t        tot_trks;        /* Total number of tracks */
  237.     byte_t        tot_min;        /* Total minutes */
  238.     byte_t        tot_sec;        /* Total seconds */
  239.     byte_t        tot_frame;        /* Total frame */
  240.     word32_t    tot_addr;        /* Total block length */
  241.     sword32_t    cur_trk;        /* Current track */
  242.     sword32_t    cur_idx;        /* Current index */
  243.     byte_t        cur_tot_min;        /* Current absolute minutes */
  244.     byte_t        cur_tot_sec;        /* Current absolute seconds */
  245.     byte_t        cur_tot_frame;        /* Current absolute frame */
  246.     byte_t        cur_trk_min;        /* Current relative minutes */
  247.     byte_t        cur_trk_sec;        /* Current relative seconds */
  248.     byte_t        cur_trk_frame;        /* Current relative frame */
  249.     byte_t        reserved2[2];        /* reserved */
  250.     word32_t    cur_tot_addr;        /* Current absolute block */
  251.     word32_t    cur_trk_addr;        /* Current relative block */
  252.     word32_t    sav_iaddr;        /* Saved index abs block */
  253.     trkinfo_t    trkinfo[MAXTRACK];    /* Per-track information */
  254.     sword32_t    playorder[MAXTRACK];    /* Prog/Shuf sequence */
  255.     word32_t    rptcnt;            /* Repeat iteration count */
  256.     bool_t        repeat;            /* Repeat mode */
  257.     bool_t        shuffle;        /* Shuffle mode */
  258.     bool_t        program;        /* Program mode */
  259.     bool_t        cddb;            /* CD Database entry */
  260.     bool_t        caddy_lock;        /* Caddy lock */
  261.     byte_t        prog_tot;        /* Prog/Shuf total tracks */
  262.     byte_t        prog_cnt;        /* Prog/Shuf track counter */
  263.     byte_t        level;            /* Current volume level */
  264.     byte_t        level_left;        /* Left channel vol percent */
  265.     byte_t        level_right;        /* Right channel vol percent */
  266.     char        vendor[9];        /* CD-ROM drive vendor */
  267.     char        prod[17];        /* CD-ROM drive model */
  268.     char        revnum[5];        /* CD-ROM firmware revision */
  269. } curstat_t;
  270.  
  271.  
  272. /* Default maximum number of CDDB directories */
  273. #define MAX_DBDIRS        20
  274.  
  275. /* Default Send CDDB site and command */
  276. #define CDDB_MAILSITE        "xmcd-cddb@amb.org"
  277. #define CDDB_MAILCMD        "mailx -s '%s' %s < %s"
  278.  
  279. /* Default message strings */
  280. #define MAIN_TITLE        "CD Audio Player"
  281. #define STR_DBMODE        "cddb"
  282. #define STR_PROGMODE        "prog"
  283. #define STR_ELAPSE        "elapse"
  284. #define STR_REMAIN_TRK        "r-trac"
  285. #define STR_REMAIN_DISC        "r-disc"
  286. #define STR_PLAY        "play"
  287. #define STR_PAUSE        "pause"
  288. #define STR_READY        "ready"
  289. #define STR_SAMPLE        "sample"
  290. #define STR_USAGE        "Usage:"
  291. #define STR_BADOPTS        "The following options are unrecognized:"
  292. #define STR_NODISC        "no disc"
  293. #define STR_BUSY        "cd busy"
  294. #define STR_UNKNDISC        "unknown disc title"
  295. #define STR_UNKNTRK        "unknown track title"
  296. #define STR_DATA        "data"
  297. #define STR_WARNING        "Warning"
  298. #define STR_FATAL        "Fatal Error"
  299. #define STR_CONFIRM        "Confirm"
  300. #define STR_INFO        "Information"
  301. #define STR_ABOUT        "About"
  302. #define STR_QUIT        "Really Quit?"
  303. #define STR_NOMEMORY        "Out of memory!"
  304. #define STR_TMPDIRERR        "Cannot create or access directory %s!"
  305. #define STR_LIBDIRERR        "Neither the XMcd*libdir resource nor the XMCD_LIBDIR environment is defined!"
  306. #define STR_NOMETHOD        "Unsupported deviceInterfaceMethod parameter!"
  307. #define STR_NOVU        "Unsupported driveVendorCode parameter!"
  308. #define STR_NOHELP        "The help file on this topic is not installed!"
  309. #define STR_NOLINK        "There is no likely CDDB entry to link to."
  310. #define STR_NODB        "No CD database directory."
  311. #define STR_NOCFG        "Cannot open configuration file \"%s\"."
  312. #define STR_NOTROM        "Device is not a CD-ROM!"
  313. #define STR_NOTSCSI2        "Device is not SCSI-II compliant."
  314. #define STR_SEND        "Mail current CDDB entry to \"%s\"?"
  315. #define STR_MAILERR        "Mail command failed."
  316. #define STR_MODERR        "Binary permissions error."
  317. #define STR_STATERR        "Cannot stat device \"%s\"."
  318. #define STR_NODERR        "\"%s\" is not the appropriate device type!"
  319. #define STR_SEQFMTERR        "Program sequence string format error."
  320. #define STR_DBDIRSERR        "maxDbdirs parameter error."
  321. #define STR_RECOVERR        "Recovering from audio playback error..."
  322. #define STR_MAXERR        "Too many errors."
  323. #define STR_SAVERR_FORK        "File not saved:\nCannot fork. (errno %d)"
  324. #define STR_SAVERR_SUID        "File not saved:\nCannot setuid to %d."
  325. #define STR_SAVERR_OPEN        "File not saved:\nCannot open file for writing."
  326. #define STR_SAVERR_CLOSE    "File not saved:\nCannot save file."
  327. #define STR_SAVERR_KILLED    "File not saved:\nChild killed. (signal %d)"
  328. #define STR_LNKERR_FORK        "File not linked:\nCannot fork. (errno %d)"
  329. #define STR_LNKERR_SUID        "File not linked:\nCannot setuid to %d."
  330. #define STR_LNKERR_LINK        "File not linked:\nLink failed."
  331. #define STR_LNKERR_KILLED    "File not linked:\nChild killed. (signal %d)"
  332.  
  333.  
  334. /* Application resource/option data */
  335. typedef struct {
  336.     char        *libdir;        /* Library path */
  337.  
  338.     /*
  339.      * Common config parameters
  340.      */
  341.     char        *device;        /* Default CD-ROM Device */
  342.     char        *dbdir;            /* Database paths */
  343.     int        max_dbdirs;        /* Max number of db dirs */
  344.     char        *dbfile_mode;        /* Database file permissions */
  345.     char        *cddb_mailsite;        /* Send CDDB mail site */
  346.     char        *cddb_mailcmd;        /* Send CDDB mail command */
  347.     int        stat_interval;        /* Status poll interval (ms) */
  348.     int        ins_interval;        /* Insert poll interval (ms) */
  349.     int        prev_threshold;        /* Previous track/index
  350.                          * threshold (blocks)
  351.                          */
  352.     int        skip_blks;        /* FF/REW skip blocks */
  353.     int        skip_pause;        /* FF/REW pause (msec) */
  354.     int        skip_spdup;        /* FF/REW speedup count */
  355.     int        skip_vol;        /* FF/REW percent volume */
  356.     int        skip_minvol;        /* FF/REW minimum volume */
  357.     int        sample_blks;        /* Sample play blocks */
  358.     int        blinkon_interval;    /* Display blink on (ms) */
  359.     int        blinkoff_interval;    /* Display blink off (ms) */
  360.     bool_t        main_showfocus;        /* Highlight kbd focus? */
  361.     bool_t        scsierr_msg;        /* Print SCSI error msg? */
  362.     bool_t        sol2_volmgt;        /* Solaris 2.x Vol Mgr */
  363.     bool_t        debug;            /* Verbose debug output */
  364.  
  365.     /*
  366.      * Device-specific config parameters
  367.      */
  368.  
  369.     /* Privileged */
  370.     int        devnum;            /* Logical device number */
  371.     int        di_method;        /* Device interface method */
  372.     int        vendor_code;        /* Vendor command set code */
  373.     int        base_scsivol;        /* SCSI volume value base */
  374.     int        min_playblks;        /* Minimum play blocks */
  375.     bool_t        play10_supp;        /* Play Audio (10) supported */
  376.     bool_t        play12_supp;        /* Play Audio (12) supported */
  377.     bool_t        playmsf_supp;        /* Play Audio MSF supported */
  378.     bool_t        playti_supp;        /* Play Audio T/I supported */
  379.     bool_t        load_supp;        /* Motorized load supported */
  380.     bool_t        eject_supp;        /* Motorized eject supported */
  381.     bool_t        msen_dbd;        /* Set DBD bit for msense */
  382.     bool_t        mselvol_supp;        /* Audio vol chg supported */
  383.     bool_t        balance_supp;        /* Indep vol chg supported */
  384.     bool_t        chroute_supp;        /* Channel routing support */
  385.     bool_t        pause_supp;        /* Pause/Resume supported */
  386.     bool_t        caddylock_supp;        /* Caddy lock supported */
  387.     bool_t        curpos_fmt;        /* Fmt 1 of RdSubch command */
  388.     bool_t        play_notur;        /* No Tst U Rdy when playing */
  389.  
  390.     /* User-modifiable */
  391.     int        vol_taper;        /* Volume control taper */
  392.     int        ch_route;        /* Channel routing */
  393.     bool_t        load_spindown;        /* Spin down disc on CD load */
  394.     bool_t        load_play;        /* Auto play on CD load */
  395.     bool_t        done_eject;        /* Auto eject on done */
  396.     bool_t        exit_eject;        /* Eject disc on exit? */
  397.     bool_t        exit_stop;        /* Stop disc on exit? */
  398.     bool_t        eject_exit;        /* Exit upon disc eject? */
  399.     bool_t        eject_close;        /* Close upon disc eject? */
  400.     bool_t        caddy_lock;        /* Lock caddy on CD load? */
  401.  
  402.     /*
  403.      * Various application message strings
  404.      */
  405.     char        *main_title;        /* Main window title */
  406.     char        *str_dbmode;        /* cddb */
  407.     char        *str_progmode;        /* prog */
  408.     char        *str_elapse;        /* elapse */
  409.     char        *str_remaintrk;        /* r-trac */
  410.     char        *str_remaindisc;    /* r-disc */
  411.     char        *str_play;        /* play */
  412.     char        *str_pause;        /* pause */
  413.     char        *str_ready;        /* ready */
  414.     char        *str_sample;        /* sample */
  415.     char        *str_usage;        /* Usage */
  416.     char        *str_badopts;        /* Bad command-line options */
  417.     char        *str_nodisc;        /* No disc */
  418.     char        *str_busy;        /* Device busy */
  419.     char        *str_unkndisc;        /* unknown disc title */
  420.     char        *str_unkntrk;        /* unknown track title */
  421.     char        *str_data;        /* Data */
  422.     char        *str_warning;        /* Warning */
  423.     char        *str_fatal;        /* Fatal error */
  424.     char        *str_confirm;        /* Confirm */
  425.     char        *str_info;        /* Information */
  426.     char        *str_about;        /* About */
  427.     char        *str_quit;        /* Really Quit? */
  428.     char        *str_nomemory;        /* Out of memory */
  429.     char        *str_tmpdirerr;        /* tempdir problem */
  430.     char        *str_libdirerr;        /* libdir not defined */
  431.     char        *str_nomethod;        /* Invalid di_method */
  432.     char        *str_novu;        /* Invalid vendor code */
  433.     char        *str_nohelp;        /* No help available on item */
  434.     char        *str_nolink;        /* No likely CDDB link */
  435.     char        *str_nodb;        /* No CDDB directory */
  436.     char        *str_nocfg;        /* Can't open config file */
  437.     char        *str_notrom;        /* Not a CD-ROM device */
  438.     char        *str_notscsi2;        /* Not SCSI-II compliant */
  439.     char        *str_send;        /* Send CDDB confirm msg */
  440.     char        *str_mailerr;        /* Mail command failed */
  441.     char        *str_moderr;        /* Binary perms error */
  442.     char        *str_staterr;        /* Can't stat device */
  443.     char        *str_noderr;        /* Not a character device */
  444.     char        *str_seqfmterr;        /* Pgm sequence format err */
  445.     char        *str_dbdirserr;        /* maxDbdirs parameter error */
  446.     char        *str_recoverr;        /* Recovering audio play err */
  447.     char        *str_maxerr;        /* Too many errors */
  448.     char        *str_saverr_fork;    /* File save err: fork */
  449.     char        *str_saverr_suid;    /* File save err: setuid */
  450.     char        *str_saverr_open;    /* File save err: open */
  451.     char        *str_saverr_close;    /* File save err: close */
  452.     char        *str_saverr_killed;    /* File save err: child kill */
  453.     char        *str_lnkerr_fork;    /* File link err: fork */
  454.     char        *str_lnkerr_suid;    /* File link err: setuid */
  455.     char        *str_lnkerr_link;    /* File link err: link */
  456.     char        *str_lnkerr_killed;    /* File link err: child kill */
  457.  
  458.     /*
  459.      * Short-cut key definitions
  460.      */
  461.     char        *btnlbl_key;        /* Button label */
  462.     char        *lock_key;        /* Lock */
  463.     char        *repeat_key;        /* Repeat */
  464.     char        *shuffle_key;        /* Shuffle */
  465.     char        *eject_key;        /* Eject */
  466.     char        *poweroff_key;        /* Quit */
  467.     char        *dbprog_key;        /* Database/Program popup */
  468.     char        *help_key;        /* Help popup */
  469.     char        *options_key;        /* Options */
  470.     char        *time_key;        /* Time */
  471.     char        *ab_key;        /* A->B */
  472.     char        *sample_key;        /* Sample */
  473.     char        *keypad_key;        /* Keypad popup */
  474.     char        *playpause_key;        /* Play/Pause */
  475.     char        *stop_key;        /* Stop */
  476.     char        *prevtrk_key;        /* Prev track */
  477.     char        *nexttrk_key;        /* Next track */
  478.     char        *previdx_key;        /* Prev index */
  479.     char        *nextidx_key;        /* Next index */
  480.     char        *rew_key;        /* REW */
  481.     char        *ff_key;        /* FF */
  482.     char        *keypad0_key;        /* Keypad 0 */
  483.     char        *keypad1_key;        /* Keypad 1 */
  484.     char        *keypad2_key;        /* Keypad 2 */
  485.     char        *keypad3_key;        /* Keypad 3 */
  486.     char        *keypad4_key;        /* Keypad 4 */
  487.     char        *keypad5_key;        /* Keypad 5 */
  488.     char        *keypad6_key;        /* Keypad 6 */
  489.     char        *keypad7_key;        /* Keypad 7 */
  490.     char        *keypad8_key;        /* Keypad 8 */
  491.     char        *keypad9_key;        /* Keypad 9 */
  492.     char        *keypadclear_key;    /* Keypad Clear */
  493.     char        *keypadenter_key;    /* Keypad Enter */
  494.     char        *keypadcancel_key;    /* Keypad Cancel */
  495. } appdata_t;
  496.  
  497.  
  498. /* Public functions that the application layer must export to libdi */
  499. extern void        cd_beep(void);
  500. extern void        cd_quit(curstat_t *);
  501. extern long        cd_timeout(word32_t, void (*)(), byte_t *);
  502. extern void        cd_untimeout(long);
  503. extern void        cd_warning_popup(char *, char *);
  504. extern void        cd_fatal_popup(char *, char *);
  505. extern bool_t        cd_devlock(char *);
  506. extern int        curtrk_pos(curstat_t *);
  507. extern int        curprog_pos(curstat_t *);
  508. extern void        cd_pause_blink(curstat_t *, bool_t);
  509. extern void        dpy_track(curstat_t *);
  510. extern void        dpy_index(curstat_t *);
  511. extern void        dpy_time(curstat_t *, bool_t);
  512. extern void        dpy_rptcnt(curstat_t *);
  513. extern void        dpy_playmode(curstat_t *, bool_t);
  514. extern void        dpy_all(curstat_t *);
  515. extern void        reset_curstat(curstat_t *, bool_t);
  516. extern void        reset_shuffle(curstat_t *);
  517. extern void        set_lock_btn(bool_t);
  518. extern void        set_shuffle_btn(bool_t);
  519. extern void        set_vol_slider(int);
  520. extern void        set_bal_slider(int);
  521. extern int        taper_vol(int);
  522. extern int        untaper_vol(int);
  523. extern int        scale_vol(int);
  524. extern int        unscale_vol(int);
  525. extern void        dbprog_dbclear(curstat_t *s);
  526. extern void        dbprog_dbget(curstat_t *s);
  527. extern curstat_t    *curstat_addr(void);
  528.  
  529.  
  530. #endif    /* __APPENV_H__ */
  531.  
  532.